﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Security;
using System.Xml;
using System.IO;
using System.Reflection;
using System.Data.SqlClient;
using System.Collections;


namespace CardReader.Controls
{
  [Guid("E1879E8E-73DA-47ED-A7CF-9798A708A75B")]
  public partial class ReadCardControl : UserControl, IObjectSafety
  {
    public int icdev; // 通讯设备标识符
    public Int16 st;
    public int sec;
    public ReadCardControl()
    {
      InitializeComponent();
    }
    #region IObjectSafety 成员

    public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
    {
      pdwSupportedOptions = 1;
      pdwEnabledOptions = 2;
    }

    public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
    {
      throw new NotImplementedException();
    }

    #endregion
    //写卡
    private void button1_Click(object sender, EventArgs e)
    {
      activex_write("yll");
    }
    //读卡
    private void button2_Click(object sender, EventArgs e)
    {
      activex_read();
    }
    public void activex_read()
    {
      string path = Assembly.GetExecutingAssembly().Location;
      path = path.Substring(0, path.LastIndexOf('\\'));//删除文件名
      if (!File.Exists(path + "\\IC.xml"))
      {
        MessageBox.Show("xml文件不存在");
        return;
      }
      //初始化card类
      CardOperate co = new CardOperate();
      if (!co.Check())
      { return; }
      if (!co.IsInt(co.port))
      { MessageBox.Show("port不为整数"); return; }
      if (!co.IsInt(co.baud))
      { MessageBox.Show("baud不为整数"); return; }

      int a = co.CardRead();
      lbKSQL.Text = co.BuyGas.ToString();
      //数据库连接字符串
      DbHelperSQL.connectionString = co.GetXMLValue("/ic/conn");
      //初始化客户信息
      DataSet dsKHXX = co.GetKHXX(co.id.ToString());
      if (dsKHXX.Tables[0].Rows.Count == 0)
      {
        MessageBox.Show("系统中没有此卡号");
        return;
      }
      if (dsKHXX.Tables[0].Rows.Count > 1)
      {
        MessageBox.Show("系统中有多个" + co.id.ToString() + "卡号");
        return;
      }
      lbKHID.Text = dsKHXX.Tables[0].Rows[0]["khid"].ToString();
      lbKHMC.Text = dsKHXX.Tables[0].Rows[0]["khmc"].ToString();
      lbBS.Text = dsKHXX.Tables[0].Rows[0]["kh"].ToString();
      //初始化上次抄表
      DataSet dsSCCB = co.GetSCCB(lbKHID.Text, dtSJ.Value.ToString("yyyyMMdd"));
      if (dsSCCB.Tables[0].Rows.Count == 1)
      {
        lbSCBS.Text = dsSCCB.Tables[0].Rows[0]["bybs"].ToString();
        lbSCCBSJ.Text = dsSCCB.Tables[0].Rows[0]["rq"].ToString();
      }
      //付款方式
      DataSet dsFKFS = co.GetFKDS();
      cbFKFS.DataSource = dsFKFS.Tables[0];
      cbFKFS.DisplayMember = "fkfs";
      cbFKFS.ValueMember = "fkid";
      cbFKFS.SelectedValue = "3";
      //抄表人
      DataSet dsCBR = co.GetCBRDS();
      cbCBR.DataSource = dsCBR.Tables[0];
      cbCBR.DisplayMember = "cbr";
      cbCBR.ValueMember = "cbrid";
      cbCBR.SelectedValue = "4";
      //操作员
      //DataSet dsCZY = co.GetCZYDS();
      //cbCZY.DataSource = dsCZY.Tables[0];
      //cbCZY.DisplayMember = "xm";
      //cbCZY.ValueMember = "dlm";

      co.Alert(a);
    }
    public string activex_write(string user)
    {
      //初始化card类
      CardOperate co = new CardOperate();
      if (!co.Check())
      { return ""; }
      if (string.IsNullOrEmpty(lbKSQL.Text))
        lbKSQL.Text = "0";
      if (Convert.ToInt32(co.BuyGas) > 0)
      {
        MessageBox.Show("卡上还有气量" + co.BuyGas.ToString());
        return "";
      }
      if (!co.IsInt(co.port))
      { MessageBox.Show("port不为整数"); return ""; }
      if (!co.IsInt(co.baud))
      { MessageBox.Show("baud不为整数"); return ""; }
      if (lbKHID.Text == "无")
      {
        MessageBox.Show("请先点击'读卡'按钮");
        return "";
      }

      string sID = sjlr.GetID("sjlr_cbsj", "cbsjid");
      if (sjlr.ExistID(lbKHID.Text, Convert.ToDateTime(dtSJ.Text).ToString("yyyyMMdd")))
      {
        MessageBox.Show("此客户于今日已录入");
        return "";
      }
      string jfsjid = sjlr.GetID("sjlr_jfsj", "jfsjid");
      Save(sID, jfsjid, user);
      return lbKHID.Text + "_" + sID + "_" + jfsjid;
    }

    protected void Save(string sID, string jfsjid, string user)
    {
      if (string.IsNullOrEmpty(txtBCYQ.Text))
      {
        MessageBox.Show("请填写本次用气");
        return;
      }
      string sj = Convert.ToDateTime(dtSJ.Text).ToString("yyyy-MM-dd");
      if (sjlr.ExistHQID(lbKHID.Text, sj))
      {
        MessageBox.Show("本次日期之后已有数据，不能修改");
        return;
      }
      if (sjlr.ExistWSBSJ(lbKHID.Text, sj))
      {
        MessageBox.Show("有未上报数据，请先处理");
        return;
      }
      if (cbFKFS.SelectedValue.ToString() == "0")
      {
        MessageBox.Show("请选择付款方式");
        return;
      }

      string sSYBS = sjlr.GetSCBS(lbKHID.Text, Convert.ToDateTime(sj));
      string sSCCBSJ = sjlr.GetSCCBSJ(lbKHID.Text, Convert.ToDateTime(sj));

      DataSet dsYQXZ = sjlr.GetYQXZ(lbKHID.Text);
      if (dsYQXZ.Tables[0].Rows.Count == 0)
      {
        MessageBox.Show("该用户未选择用气性质，请与管理员联系");
        return;
      }

      SqlParameter[] cmdParams = null;
      string sSql = "";
      List<CommandInfo> cis = new List<CommandInfo>();
      ArrayList arrValue = new ArrayList();
      ArrayList arrLengh = new ArrayList();
      CommandInfo ci;
      #region 插入cbsj
      cis.Add(sjlr.DeleteCI("SJLR_CBSJ", "cbsjid", sID));

      arrValue = new ArrayList();
      arrValue.Add(sID);
      arrValue.Add(user);
      arrValue.Add(cbCBR.SelectedValue);
      arrValue.Add(lbKHID.Text);
      arrValue.Add(sj);
      arrValue.Add((Convert.ToDouble(txtBCYQ.Text) + Convert.ToDouble(sSYBS)).ToString());
      arrValue.Add(txtBCYQ.Text);
      arrValue.Add(DBNull.Value);
      arrValue.Add("0");
      arrValue.Add(DBNull.Value);
      arrValue.Add(DBNull.Value);
      arrValue.Add(DBNull.Value);
      arrValue.Add((Convert.ToDouble(txtBCYQ.Text)));
      arrValue.Add(DBNull.Value);
      arrValue.Add(jfsjid);
      arrValue.Add(sSYBS);
      arrValue.Add(string.IsNullOrEmpty(sSCCBSJ) ? Convert.DBNull : sSCCBSJ);
      arrLengh = new ArrayList();
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("200");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("200");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      cis.Add(sjlr.InsertCI("sjlr_cbsj", arrValue, arrLengh));
      #endregion
      #region 插入bqql
      cis.Add(sjlr.DeleteCI("SJLR_bqql", "cbsjid", sID));

      DataTable dtJG = sjlr.GetJG(dsYQXZ.Tables[0].Rows[0]["yqxzid"].ToString(), sj);
      if (dsYQXZ.Tables[0].Rows.Count == 1)
      {
        if (dtJG.Rows.Count == 0)
        {
          MessageBox.Show("还未录入价格，请与管理员联系");
          return;
        }

        arrValue = new ArrayList();
        arrValue.Add(dsYQXZ.Tables[0].Rows[0]["yqxzid"].ToString());
        arrValue.Add(sID);
        arrValue.Add(txtBCYQ.Text);
        arrValue.Add("2");
        arrValue.Add(dtJG.Rows[0]["jg"].ToString());
        arrValue.Add(dtJG.Rows[0]["jj"].ToString());
        arrValue.Add(DBNull.Value);
        arrValue.Add(DBNull.Value);
        arrValue.Add(DBNull.Value);
        arrValue.Add(DBNull.Value);
        arrValue.Add(DBNull.Value);
        arrValue.Add(DBNull.Value);
        arrValue.Add(DBNull.Value);
        arrValue.Add(user);
        arrValue.Add(DateTime.Now.ToString());
        arrLengh = new ArrayList();
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        arrLengh.Add("20");
        cis.Add(sjlr.InsertCI("sjlr_bqql", arrValue, arrLengh));

        sSql = @"update sjlr_bqql set ysjg=ceiling(jg*bqql*100)/100,ysjj=ceiling(jj*bqql*100)/100,
      ysfy=ceiling((jg+jj)*bqql*100)/100,ssql=bqql,ssjg=ceiling(jg*bqql*100)/100,ssjj=ceiling(jj*bqql*100)/100,
      ssfy=ceiling((jg+jj)*bqql*100)/100
      where yqxzid=@0 and cbsjid=@1";
        cmdParams = new SqlParameter[2] { new SqlParameter("@0", SqlDbType.VarChar, 10), new SqlParameter("@1", SqlDbType.VarChar, 12) };
        cmdParams[0].Value = dsYQXZ.Tables[0].Rows[0]["yqxzid"].ToString();
        cmdParams[1].Value = sID;
        ci = new CommandInfo();
        ci.CommandText = sSql;
        ci.Parameters = cmdParams;
        cis.Add(ci);
      }
      #endregion
      #region 缴费数据
      cis.Add(sjlr.DeleteCI("sjlr_jfsj", "jfsjid", jfsjid));

      double bqys = Math.Ceiling(Math.Round((Convert.ToDouble(txtBCYQ.Text) * (Convert.ToDouble(dtJG.Rows[0]["jg"].ToString())
        + Convert.ToDouble(dtJG.Rows[0]["jj"].ToString()))
        * 100), 1)) / 100;
      arrValue = new ArrayList();
      arrValue.Add(jfsjid);
      arrValue.Add(user);
      arrValue.Add(cbFKFS.SelectedValue);
      arrValue.Add(lbKHID.Text);
      arrValue.Add(DateTime.Now.ToString());
      arrValue.Add(bqys);
      arrValue.Add("0");
      arrValue.Add(sjlr.GetBH());
      arrValue.Add(0);
      arrValue.Add(0);
      arrValue.Add(bqys);
      arrValue.Add(0);
      arrLengh = new ArrayList();
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      arrLengh.Add("20");
      cis.Add(sjlr.InsertCI("sjlr_jfsj", arrValue, arrLengh));
      #endregion
      #region 缴费明细
      //cis.Add(CommonUse.DeleteCI("sjlr_jfmx", "jf_fksjid", jfsjid));

      //arrValue = new ArrayList();
      //arrValue.Add(jfsjid);
      //arrValue.Add(lbYQXZ.Value);
      //arrValue.Add(lbJG.Value);
      //arrValue.Add(txtName.Text);
      //arrValue.Add(lbJJ.Value);
      //arrValue.Add(bqys);
      //arrValue.Add(sID);
      //arrLengh = new ArrayList();
      //arrLengh.Add("20");
      //arrLengh.Add("20");
      //arrLengh.Add("20");
      //arrLengh.Add("20");
      //arrLengh.Add("20");
      //arrLengh.Add("20");
      //arrLengh.Add("20");
      //cis.Add(CommonUse.InsertCI("sjlr_jfmx", arrValue, arrLengh));
      #endregion
      if (DbHelperSQL.ExecuteSqlTran(cis) > 0)
      {
        MessageBox.Show("保存成功");
        ZHCX.CreateZHCX(lbKHID.Text, sj);
        ZHCX.UpdateCB(lbKHID.Text, sj, sID);
        ZHCX.UpdateJF(lbKHID.Text, DateTime.Now.ToString("yyyy-MM-dd"));
        //if (CommonUse.GetID("cbsjid") != "")
        //{
        //  string nr = "";
        //  if (txtName.Text != hlName.Value)
        //    nr += "本次用气由" + hlName.Value + "改为" + txtName.Text + "  ";
        //  if (dateJG.Text != hlJG.Value)
        //    nr += "日期由" + hlJG.Value + "改为" + dateJG.Text + "  ";
        //  if (ddlCBR.SelectedValue != hlCBR.Value)
        //    nr += "抄表人由" + ddlCBR.Items.FindByValue(hlCBR.Value).Text + "改为" + ddlCBR.SelectedItem.Text + "  ";
        //  if (ddlFKFS.SelectedValue != hlFKFS.Value)
        //    nr += "付款方式由" + ddlFKFS.Items.FindByValue(hlFKFS.Value).Text + "改为" + ddlFKFS.SelectedItem.Text + "  ";
        //  if (nr != "")
        //    rzcz.InsertRZ("修改IC卡收费:客户编码为" + lbKHID.Text + ",日期为" + dateJG.Text + nr);
        //}
      }
    }
  }
}
